mirror of
https://github.com/brain-hackers/u-boot-brain
synced 2024-09-19 11:13:24 +09:00
![Graeme Russ](/assets/img/avatar_default.png)
Use the base address of the 'F' segment as a pointer to the global data structure. By adding the linear address (i.e. the 'D' segment address) as the first word of the global data structure, the address of the global data relative to the 'D' segment can be found simply, for example, by: fs movl 0, %eax This makes the gd 'pointer' writable prior to relocation (by reloading the Global Desctriptor Table) which brings x86 into line with all other arches NOTE: Writing to the gd 'pointer' is expensive (but we only do it twice) but using it to access global data members (read and write) is still fairly cheap -- Changes for v2: - Rebased against changes made to patch #3 - Removed extra indent - Tweaked commit message
49 lines
1.4 KiB
C
49 lines
1.4 KiB
C
/*
|
|
* (C) Copyright 2002
|
|
* Daniel Engström, Omicron Ceti AB, daniel@omicron.se
|
|
*
|
|
* See file CREDITS for list of people who contributed to this
|
|
* project.
|
|
*
|
|
* This program is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU General Public License as
|
|
* published by the Free Software Foundation; either version 2 of
|
|
* the License, or (at your option) any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program; if not, write to the Free Software
|
|
* Foundation, Inc., 59 Temple Place, Suite 330, Boston,
|
|
* MA 02111-1307 USA
|
|
*/
|
|
|
|
#ifndef __ASM_PROCESSOR_H_
|
|
#define __ASM_PROCESSOR_H_ 1
|
|
|
|
#define X86_GDT_ENTRY_SIZE 8
|
|
|
|
#ifndef __ASSEMBLY__
|
|
|
|
enum {
|
|
X86_GDT_ENTRY_NULL = 0,
|
|
X86_GDT_ENTRY_UNUSED,
|
|
X86_GDT_ENTRY_32BIT_CS,
|
|
X86_GDT_ENTRY_32BIT_DS,
|
|
X86_GDT_ENTRY_32BIT_FS,
|
|
X86_GDT_ENTRY_16BIT_CS,
|
|
X86_GDT_ENTRY_16BIT_DS,
|
|
X86_GDT_NUM_ENTRIES
|
|
};
|
|
#else
|
|
/* NOTE: If the above enum is modified, this define must be checked */
|
|
#define X86_GDT_ENTRY_32BIT_DS 3
|
|
#endif
|
|
|
|
#define X86_GDT_SIZE (X86_GDT_NUM_ENTRIES * X86_GDT_ENTRY_SIZE)
|
|
|
|
#endif
|