|
27 | 27 | #include <utility>
|
28 | 28 | #include <vector>
|
29 | 29 |
|
30 |
| -// TODO: internal/endian.h will become private with abseil-cpp LTS 202507. |
31 |
| -// Switch to absl::byteswap. |
32 |
| -#include "absl/base/internal/endian.h" |
| 30 | +#include "absl/base/nullability.h" |
| 31 | +#include "absl/numeric/bits.h" |
33 | 32 | #include "absl/status/status.h"
|
34 | 33 | #include "absl/status/statusor.h"
|
35 | 34 | #include "absl/strings/match.h"
|
@@ -123,18 +122,32 @@ class ElfParser {
|
123 | 122 | private:
|
124 | 123 | ElfParser() = default;
|
125 | 124 |
|
126 |
| - // Endianess support functions |
127 |
| - uint16_t Load16(const void* src) { |
128 |
| - return elf_little_ ? absl::little_endian::Load16(src) |
129 |
| - : absl::big_endian::Load16(src); |
| 125 | + // Endianness support functions |
| 126 | + uint16_t Load16(const void* absl_nonnull src) { |
| 127 | + uint16_t v; |
| 128 | + memcpy(&v, src, sizeof(v)); |
| 129 | + if constexpr (absl::endian::native == absl::endian::little) { |
| 130 | + return elf_little_ ? v : absl::byteswap(v); |
| 131 | + } |
| 132 | + return elf_little_ ? absl::byteswap(v) : v; |
130 | 133 | }
|
131 |
| - uint32_t Load32(const void* src) { |
132 |
| - return elf_little_ ? absl::little_endian::Load32(src) |
133 |
| - : absl::big_endian::Load32(src); |
| 134 | + |
| 135 | + uint32_t Load32(const void* absl_nonnull src) { |
| 136 | + uint32_t v; |
| 137 | + memcpy(&v, src, sizeof(v)); |
| 138 | + if constexpr (absl::endian::native == absl::endian::little) { |
| 139 | + return elf_little_ ? v : absl::byteswap(v); |
| 140 | + } |
| 141 | + return elf_little_ ? absl::byteswap(v) : v; |
134 | 142 | }
|
135 |
| - uint64_t Load64(const void* src) { |
136 |
| - return elf_little_ ? absl::little_endian::Load64(src) |
137 |
| - : absl::big_endian::Load64(src); |
| 143 | + |
| 144 | + uint64_t Load64(const void* absl_nonnull src) { |
| 145 | + uint64_t v; |
| 146 | + memcpy(&v, src, sizeof(v)); |
| 147 | + if constexpr (absl::endian::native == absl::endian::little) { |
| 148 | + return elf_little_ ? v : absl::byteswap(v); |
| 149 | + } |
| 150 | + return elf_little_ ? absl::byteswap(v) : v; |
138 | 151 | }
|
139 | 152 |
|
140 | 153 | template <size_t N>
|
|
0 commit comments