Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 13 Aug 2018 13:56:05 +0930
From:      Shane Ambler <FreeBSD@ShaneWare.Biz>
To:        blubee blubeeme <gurenchan@gmail.com>
Cc:        FreeBSD current <freebsd-current@freebsd.org>
Subject:   Re: FreeBSD elf_machine_id
Message-ID:  <69ca3709-fea2-efad-b108-b9173261eefd@ShaneWare.Biz>
In-Reply-To: <CALM2mEm1p=iq4BuGOgEJ%2B8hhmSmRtcwNFFa4b-BcWO1aSgy0SQ@mail.gmail.com>
References:  <CALM2mEmySWV-fVaFtrADi35=2ifL4YgeLWfuXHx9Q6c5SGjd7A@mail.gmail.com> <A1CEB6C9-5927-40CF-B0CE-B006B2A08574@FreeBSD.org> <CALM2mEmqy4wUvzQbeY5PmL1iwZuYBHM9XZYzPd5xS3i9Ce2XDw@mail.gmail.com> <CALM2mEm1p=iq4BuGOgEJ%2B8hhmSmRtcwNFFa4b-BcWO1aSgy0SQ@mail.gmail.com>

next in thread | previous in thread | raw e-mail | index | archive | help
On 12/8/18 11:32 pm, blubee blubeeme wrote:
> On Sun, Aug 12, 2018 at 9:59 PM blubee blubeeme <gurenchan@gmail.com> wrote:
> 
>>
>>
>> On Sun, Aug 12, 2018 at 7:43 PM Dimitry Andric <dim@freebsd.org> wrote:
>>
>>> On 12 Aug 2018, at 13:21, blubee blubeeme <gurenchan@gmail.com> wrote:
>>>>
>>>> What's the elf_machine_id for FreeBSD amd64 systems?
>>>>
>>>> How can I find this info?
>>>
>>> There isn't any FreeBSD-specific machine ID, just a machine ID for
>>> x86-64 (aka amd64) in general:
>>>
>>> $ grep x86-64 /usr/include/sys/elf_common.h
>>> #define EM_X86_64       62      /* Advanced Micro Devices x86-64 */
>>> #define EM_AMD64        EM_X86_64       /* Advanced Micro Devices x86-64
>>> (compat) */
>>>
>>> -Dimitry
>>>
>>> Thank you for the clarification.
>>
>> I think in this case I was looking for 62.
>>
>> Best,
>> Owen
>>
> Actually I had another quick question along these lines.
> 
> if x86_64 is already defined should I bother changing those to amd64 or
> just use x86_64 and make FreeBSD modifications where Linux specifics are
> defined?

As I understand it, AMD designed the 64bit extensions and early adopters
referred to it as amd64, then when Intel adopted it they needed a more
generic term, so x86_64 was started, now usually both __X86_64__ and
__amd64__ are compiler defined based on the target.

So it may depend on why you are asking for the elf_machine_id.

For general C/C++ programming -

#if defined(__x86_64__)
// 64bit code
#else
// 32 bit code
#endif

or to be safe you can check all variations

#if defined(__X86_64__) || defined(__amd64__)

For freebsd specific changes -

#if defined(__FreeBSD__)
#include <sys/param.h>
#if __FreeBSD_version < 1101000
// version specific see porters handbook for version list
#endif
#endif

If you want to see all the compiler defined environment macros run

clang++ -dM -E -x c /dev/null
or
clang++ -dM -E -x c++ /dev/null
or for a 32bit env
clang++ -dM -E -m32 -x c++ /dev/null

works for clang and gcc. I believe when multiple variations exist, the
__xx__ macros are most common eg use __x86_64__ not __x86_64

-- 
FreeBSD - the place to B...Software Developing

Shane Ambler




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?69ca3709-fea2-efad-b108-b9173261eefd>