[PATCH] D44227: [ELF] Convert {read, write}*be to endianness-aware read/write.

Rui Ueyama via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Thu Mar 8 20:04:21 PST 2018


ruiu accepted this revision.
ruiu added a comment.
This revision is now accepted and ready to land.

LGTM



================
Comment at: ELF/Target.h:184
+// Endianness-aware read/write.
+inline uint16_t read16(const void *P) {
+  return llvm::support::endian::read16(P, Config->Endianness);
----------------
MaskRay wrote:
> ruiu wrote:
> > Please use `uint8_t *` instead of `void *` for P.
> ```
> ../projects/lld/ELF/SyntheticSections.cpp:1767:5: error: no matching function for call to 'write32'
>     write32(Buckets + I->BucketIdx, I->Sym->DynsymIndex);
>     ^~~~~~~
> ../projects/lld/ELF/Target.h:200:13: note: candidate function not viable: no known conversion from 'uint32_t *' (aka 'unsigned int *') to 'uint8_t *' (aka 'unsigned char *') for 1st argument
> inline void write32(uint8_t *P, uint32_t V) {
>             ^
> ../projects/lld/ELF/SyntheticSections.cpp:1841:3: error: no matching function for call to 'write32'
>   write32(P++, NumSymbols); // nbucket
>   ^~~~~~~
> ../projects/lld/ELF/Target.h:200:13: note: candidate function not viable: no known conversion from 'uint32_t *' (aka 'unsigned int *') to 'uint8_t *' (aka 'unsigned char *') for 1st argument
> inline void write32(uint8_t *P, uint32_t V) {
>             ^
> ../projects/lld/ELF/SyntheticSections.cpp:1842:3: error: no matching function for call to 'write32'
>   write32(P++, NumSymbols); // nchain
> ```
> 
> uint8_t* uint32_t* uint16_t*  typed pointers are all used. `void *` is a common type they will accept.
Ah thanks. I didn't know that.


Repository:
  rLLD LLVM Linker

https://reviews.llvm.org/D44227





More information about the llvm-commits mailing list