#
359754 |
|
09-Apr-2020 |
kevans |
MFC -fno-common fixes: r359389, r359394, r359397-r359399, r359403-r359404, r359406, r359413-r359416, r359425, r359427, r359432-r359433, r359443, r359675-r359677
Note: this is not necessarily a complete fix to get these programs to build with -fno-common applied.
r359389: config(8): fixes for -fno-common
Move this handful of definitions into main.c, properly declare these as extern in config.h. This fixes the config(8) build with -fno-common.
Unexplained in my previous commit to gas, -fno-common will become the default in GCC10 and LLVM11, so it's worth addressing these in advance.
r359394: MFV r359393: tcsh: import 6974bc35a5cd
This removes an extra variable definition that causes the -fno-common build to fail, which will be a new default in GCC10/LLVM11.
r359397: zfs: fix -fno-common issues
A similar (or identical?) fix has already landed in OpenZFS.
-fno-common will become the default in GCC10/LLVM11.
r359398: sh: remove duplicate el definition
el is declared extern in myhistedit.h and defined in histedit.c. Remove the duplicate definition in input.c to appease the -fno-common build.
-fno-common will become the default in GCC10/LLVM11.
r359399: telnet: remove some duplicate definitions, mark terminaltype extern
Most of these were already properly declared and defined elsewhere, this is effectively just a minor cleanup that fixes the -fno-common build.
-fno-common will become the default in GCC10/LLVM11.
r359403: Revert 359399: telnet -fno-common bits
There was a large misfire from my local diff that I need to investigate, and this version committed did not build.
r359404: Re-apply r359399: telnet -fno-common fix
line and auth_level's redefinitions are just extraneous
telnetd will #define extern and then include ext.h to allocate storage for all of these extern'd vars; however, two of them are actually defined in libtelnet instead. Instead of doing an #ifdef extern dance around those function pointers, just add an EXTERN macro to make it easier to differentiate by sight which ones will get allocated in globals.c and which ones are defined elsewhere.
r359406: telnet: kill off remaining duplicate definition
r359413: ipfilter: remove duplicate definition of 'thishost'
thishost is already defined in lib/initparse.c; no need for this one. This fixes the ipfilter build with -fno-common.
-fno-common will become the default in GCC10/LLVM11.
r359414: iscontrol: move definition of vflag/iscsidev to iscontrol.c
Mark the declaration extern as these are used elsewhere; this fixes the build with -fno-common.
r359415: userboot: mark host_fsops as extern
This is already defined elsewhere; mark this declaration extern to the fix the -fno-common build.
r359416: systat: remove redundant definition of kd
kd is already properly declared in extern.h and defined in main.c, rendering this definition useless. This fixes the -fno-common build.
r359425: locate: fix -fno-common build
Just a single variable declaration to extern and define elsewhere here, myctype.
-fno-common will become a default in GCC10/LLVM11.
r359427: fsck_ffs/fsdb: fix -fno-common build
This one is also a small list:
- 3x duplicate definition (ufs2_zino, returntosingle, nflag) - 5x 'needs extern', 3/5 of which are referenced in fsdb
-fno-common will become the default in GCC10/LLVM11.
r359432: gdb: compile with -fcommon explicitly
As described in the comment, gdb relies on some of the linker magic that happens with -fcommon. I suspect the life expectancy of gdb-in-base is low enough that this isn't worth spending much time addressing, especially given the vintage. Hit it with the -fcommon hammer so that it continues to just work.
r359433: bmake: fix -fno-common build
debug was declared extern, but debug_file was not; correct this and define debug_file in main.c (as debug is) to fix the -fno-common build.
-fno-common will become the default with GCC10/LLVM11.
r359443: MFV r359442: bmake: import -fno-common fix build back from upstream
sjg@ committed the local patch previously committed upstream; pull it in to vendor/ to ease any potential stress of future imports.
r359675: kqueue tests: fix -fno-common build
vnode_fd and kqfd are both shared among multiple CU; define them exactly once.
In the case of vnode_fd, it was simply the declaration that needed correction.
-fno-common will become the default in GCC10/LLVM11.
r359676: ntpd: fix build with -fno-common
Only a small nit here: psl should be declared extern and defined exactly once.
-fno-common will become the default in GCC10/LLVM11.
r359677: yp*: fix -fno-common build
This is mostly two problems spread out far and wide: - ypldap_process should be declared properly - debug is defined differently in many programs
For the latter, just extern it and define it everywhere that actually needs it. This mostly works out nicely for ^/libexec/ypxfr, which can remove the assignment at the beginning of main in favor of defining it properly.
-fno-common will become the default in GCC10/LLVM11.
|
#
261504 |
|
05-Feb-2014 |
jhb |
Add support for FreeBSD/i386 guests under bhyve. - Similar to the hack for bootinfo32.c in userboot, define _MACHINE_ELF_WANT_32BIT in the load_elf32 file handlers in userboot. This allows userboot to load 32-bit kernels and modules. - Copy the SMAP generation code out of bootinfo64.c and into its own file so it can be shared with bootinfo32.c to pass an SMAP to the i386 kernel. - Use uint32_t instead of u_long when aligning module metadata in bootinfo32.c in userboot, as otherwise the metadata used 64-bit alignment which corrupted the layout. - Populate the basemem and extmem members of the bootinfo struct passed to 32-bit kernels. - Fix the 32-bit stack in userboot to start at the top of the stack instead of the bottom so that there is room to grow before the kernel switches to its own stack. - Push a fake return address onto the 32-bit stack in addition to the arguments normally passed to exec() in the loader. This return address is needed to convince recover_bootinfo() in the 32-bit locore code that it is being invoked from a "new" boot block. - Add a routine to libvmmapi to setup a 32-bit flat mode register state including a GDT and TSS that is able to start the i386 kernel and update bhyveload to use it when booting an i386 kernel. - Use the guest register state to determine the CPU's current instruction mode (32-bit vs 64-bit) and paging mode (flat, 32-bit, PAE, or long mode) in the instruction emulation code. Update the gla2gpa() routine used when fetching instructions to handle flat mode, 32-bit paging, and PAE paging in addition to long mode paging. Don't look for a REX prefix when the CPU is in 32-bit mode, and use the detected mode to enable the existing 32-bit mode code when decoding the mod r/m byte.
Reviewed by: grehan, neel MFC after: 1 month
|