[llvm] r209235 - Update MachOObjectFile::getSymbolAddress so it returns UnknownAddressOrSize

Rafael Espíndola rafael.espindola at gmail.com
Wed May 21 15:44:15 PDT 2014


Thanks for all these fixes for MachO!

On 20 May 2014 16:32, Kevin Enderby <enderby at apple.com> wrote:
> Author: enderby
> Date: Tue May 20 15:32:18 2014
> New Revision: 209235
>
> URL: http://llvm.org/viewvc/llvm-project?rev=209235&view=rev
> Log:
> Update MachOObjectFile::getSymbolAddress so it returns UnknownAddressOrSize
> for undefined symbols.  Allowing llvm-nm to print spaces instead of 0’s for
> the value of undefined symbols in Mach-O files.
>
> Modified:
>     llvm/trunk/lib/Object/MachOObjectFile.cpp
>     llvm/trunk/test/Object/nm-trivial-object.test
>     llvm/trunk/test/Object/nm-universal-binary.test
>
> Modified: llvm/trunk/lib/Object/MachOObjectFile.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Object/MachOObjectFile.cpp?rev=209235&r1=209234&r2=209235&view=diff
> ==============================================================================
> --- llvm/trunk/lib/Object/MachOObjectFile.cpp (original)
> +++ llvm/trunk/lib/Object/MachOObjectFile.cpp Tue May 20 15:32:18 2014
> @@ -472,10 +472,18 @@ error_code MachOObjectFile::getSymbolAdd
>                                               uint64_t &Res) const {
>    if (is64Bit()) {
>      MachO::nlist_64 Entry = getSymbol64TableEntry(Symb);
> -    Res = Entry.n_value;
> +    if ((Entry.n_type & MachO::N_TYPE) == MachO::N_UNDF &&
> +        Entry.n_value == 0)
> +      Res = UnknownAddressOrSize;
> +    else
> +      Res = Entry.n_value;
>    } else {
>      MachO::nlist Entry = getSymbolTableEntry(Symb);
> -    Res = Entry.n_value;
> +    if ((Entry.n_type & MachO::N_TYPE) == MachO::N_UNDF &&
> +        Entry.n_value == 0)
> +      Res = UnknownAddressOrSize;
> +    else
> +      Res = Entry.n_value;
>    }
>    return object_error::success;
>  }
>
> Modified: llvm/trunk/test/Object/nm-trivial-object.test
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Object/nm-trivial-object.test?rev=209235&r1=209234&r2=209235&view=diff
> ==============================================================================
> --- llvm/trunk/test/Object/nm-trivial-object.test (original)
> +++ llvm/trunk/test/Object/nm-trivial-object.test Tue May 20 15:32:18 2014
> @@ -55,14 +55,14 @@ WEAK-ELF64: 0000000000000000 V x2
>  ABSOLUTE-ELF64: 0000000000000123 a a1
>  ABSOLUTE-ELF64: 0000000000000123 A a2
>
> -macho: 00000000 U _SomeOtherFunction
> +macho:          U _SomeOtherFunction
>  macho: 00000000 T _main
> -macho: 00000000 U _puts
> +macho:          U _puts
>
>  macho64: 0000000000000028 s L_.str
> -macho64: 0000000000000000 U _SomeOtherFunction
> +macho64:                  U _SomeOtherFunction
>  macho64: 0000000000000000 T _main
> -macho64: 0000000000000000 U _puts
> +macho64:                  U _puts
>
>
>  Test that nm uses addresses even with ELF .o files.
>
> Modified: llvm/trunk/test/Object/nm-universal-binary.test
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Object/nm-universal-binary.test?rev=209235&r1=209234&r2=209235&view=diff
> ==============================================================================
> --- llvm/trunk/test/Object/nm-universal-binary.test (original)
> +++ llvm/trunk/test/Object/nm-universal-binary.test Tue May 20 15:32:18 2014
> @@ -13,7 +13,7 @@ CHECK-AR: 0000000000000068 s EH_frame0
>  CHECK-AR: 000000000000003b s L_.str
>  CHECK-AR: 0000000000000000 T _main
>  CHECK-AR: 0000000000000080 S _main.eh
> -CHECK-AR: 0000000000000000 U _printf
> +CHECK-AR:                  U _printf
>  CHECK-AR: macho-universal-archive.x86_64.i386:i386:foo.o:
>  CHECK-AR: 00000008 S _bar
>  CHECK-AR: 00000000 T _foo
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits




More information about the llvm-commits mailing list