forgot to commit a few files :-)
This commit is contained in:
493
bepascal/source/bepascal/pas/src/be/kernel/debugger.pp
Normal file
493
bepascal/source/bepascal/pas/src/be/kernel/debugger.pp
Normal file
@@ -0,0 +1,493 @@
|
|||||||
|
unit debugger;
|
||||||
|
// Description: kernel interface for a debugger.
|
||||||
|
|
||||||
|
interface
|
||||||
|
|
||||||
|
uses
|
||||||
|
{$ifdef CPUI386}
|
||||||
|
signal,
|
||||||
|
{$endif CPUI386}
|
||||||
|
BeBuild, OS, image, SupportDefs;
|
||||||
|
|
||||||
|
|
||||||
|
// kernel calls
|
||||||
|
function install_default_debugger(to_debugger_port : port_id) : status_t;
|
||||||
|
cdecl; external 'root' name 'install_default_debugger';
|
||||||
|
function install_team_debugger(team : team_id; to_debugger_port : port_id) : port_id;
|
||||||
|
cdecl; external 'root' name 'install_team_debugger';
|
||||||
|
function remove_team_debugger(team : team_id) : status_t;
|
||||||
|
cdecl; external 'root' name 'remove_team_debugger';
|
||||||
|
function debug_thread(thread : thread_id) : status_t;
|
||||||
|
cdecl; external 'root' name 'debug_thread';
|
||||||
|
|
||||||
|
{ per-thread debugging flags (returned by the get_thread_debug_info request to
|
||||||
|
the debugging nub) }
|
||||||
|
const
|
||||||
|
B_STOP_CHILD_THREADS = $01;
|
||||||
|
|
||||||
|
// ids for why a thread is invoking the debugger
|
||||||
|
|
||||||
|
{$ifdef POWERPC}
|
||||||
|
type
|
||||||
|
db_why_stopped = (
|
||||||
|
B_THREAD_NOT_RUNNING,
|
||||||
|
B_DEBUGGER_CALL,
|
||||||
|
B_BREAKPOINT_HIT,
|
||||||
|
B_NMI,
|
||||||
|
B_MACHINE_CHECK_EXCEPTION,
|
||||||
|
B_DATA_ACCESS_EXCEPTION,
|
||||||
|
B_INSTRUCTION_ACCESS_EXCEPTION,
|
||||||
|
B_ALIGNMENT_EXCEPTION,
|
||||||
|
B_PROGRAM_EXCEPTION,
|
||||||
|
B_GET_PROFILING_INFO,
|
||||||
|
B_WATCHPOINT_HIT,
|
||||||
|
B_SYSCALL_HIT
|
||||||
|
);
|
||||||
|
{$endif POWERPC}
|
||||||
|
|
||||||
|
{$ifdef CPUI386}
|
||||||
|
type
|
||||||
|
db_why_stopped = (
|
||||||
|
B_THREAD_NOT_RUNNING,
|
||||||
|
B_DEBUGGER_CALL,
|
||||||
|
B_BREAKPOINT_HIT,
|
||||||
|
B_SNGLSTP,
|
||||||
|
B_NMI,
|
||||||
|
B_MACHINE_CHECK_EXCEPTION,
|
||||||
|
B_SEGMENT_VIOLATION,
|
||||||
|
B_ALIGNMENT_EXCEPTION,
|
||||||
|
B_DIVIDE_ERROR,
|
||||||
|
B_OVERFLOW_EXCEPTION,
|
||||||
|
B_BOUNDS_CHECK_EXCEPTION,
|
||||||
|
B_INVALID_OPCODE_EXCEPTION,
|
||||||
|
B_SEGMENT_NOT_PRESENT,
|
||||||
|
B_STACK_FAULT,
|
||||||
|
B_GENERAL_PROTECTION_FAULT,
|
||||||
|
B_FLOATING_POINT_EXCEPTION,
|
||||||
|
B_GET_PROFILING_INFO,
|
||||||
|
B_WATCHPOINT_HIT,
|
||||||
|
B_SYSCALL_HIT
|
||||||
|
);
|
||||||
|
{$endif CPUI386}
|
||||||
|
|
||||||
|
{ cpu state. It is arranged to be useable by the kernel, hence all the
|
||||||
|
C volatile regs are grouped at the beginning. The non-volatile ones
|
||||||
|
are only saved when neccessary. }
|
||||||
|
|
||||||
|
{$ifdef POWERPC}
|
||||||
|
type
|
||||||
|
cpu_state = packed record
|
||||||
|
filler1,
|
||||||
|
fpscr,
|
||||||
|
pc,
|
||||||
|
msr,
|
||||||
|
lr,
|
||||||
|
ctr,
|
||||||
|
xer,
|
||||||
|
cr,
|
||||||
|
sprg0,
|
||||||
|
filler2, // force alignment on quad-word
|
||||||
|
filler3,
|
||||||
|
filler4,
|
||||||
|
r0,
|
||||||
|
r1, // stack ptr
|
||||||
|
r2,
|
||||||
|
r3,
|
||||||
|
r4,
|
||||||
|
r5,
|
||||||
|
r6,
|
||||||
|
r7,
|
||||||
|
r8,
|
||||||
|
r9,
|
||||||
|
r10,
|
||||||
|
r11,
|
||||||
|
r12,
|
||||||
|
r13,
|
||||||
|
r14,
|
||||||
|
r15,
|
||||||
|
r16,
|
||||||
|
r17,
|
||||||
|
r18,
|
||||||
|
r19,
|
||||||
|
r20,
|
||||||
|
r21,
|
||||||
|
r22,
|
||||||
|
r23,
|
||||||
|
r24,
|
||||||
|
r25,
|
||||||
|
r26,
|
||||||
|
r27,
|
||||||
|
r28,
|
||||||
|
r29,
|
||||||
|
r30,
|
||||||
|
r31 : Longint;
|
||||||
|
f0,
|
||||||
|
f1,
|
||||||
|
f2,
|
||||||
|
f3,
|
||||||
|
f4,
|
||||||
|
f5,
|
||||||
|
f6,
|
||||||
|
f7,
|
||||||
|
f8,
|
||||||
|
f9,
|
||||||
|
f10,
|
||||||
|
f11,
|
||||||
|
f12,
|
||||||
|
f13, // C non-volatile regs start here
|
||||||
|
f14,
|
||||||
|
f15,
|
||||||
|
f16,
|
||||||
|
f17,
|
||||||
|
f18,
|
||||||
|
f19,
|
||||||
|
f20,
|
||||||
|
f21,
|
||||||
|
f22,
|
||||||
|
f23,
|
||||||
|
f24,
|
||||||
|
f25,
|
||||||
|
f26,
|
||||||
|
f27,
|
||||||
|
f28,
|
||||||
|
f29,
|
||||||
|
f30,
|
||||||
|
f31 : Double;
|
||||||
|
end;
|
||||||
|
{$endif POWERPC}
|
||||||
|
|
||||||
|
{$ifdef CPUI386}
|
||||||
|
|
||||||
|
{ all the 486 registers including the segment registers and the
|
||||||
|
general registers. }
|
||||||
|
type
|
||||||
|
cpu_state = packed record
|
||||||
|
xregs : extended_regs; // fpu/mmx/xmm registers
|
||||||
|
gs,
|
||||||
|
reserved0,
|
||||||
|
fs,
|
||||||
|
reserved1,
|
||||||
|
es,
|
||||||
|
reserved2,
|
||||||
|
ds,
|
||||||
|
reserved3 : Word;
|
||||||
|
edi,
|
||||||
|
esi,
|
||||||
|
ebp;
|
||||||
|
esp_res,
|
||||||
|
ebx,
|
||||||
|
edx,
|
||||||
|
ecx,
|
||||||
|
eax,
|
||||||
|
trap_no, // trap or int number
|
||||||
|
error_code, // trap error code
|
||||||
|
eip : Longword; // user eip
|
||||||
|
cs, // user cs
|
||||||
|
reserved4 : Word;
|
||||||
|
eflags, // user elfags
|
||||||
|
uesp : Longword; // user esp
|
||||||
|
ss, // user ss
|
||||||
|
reserved5 : Word;
|
||||||
|
end;
|
||||||
|
{$endif CPUI386}
|
||||||
|
|
||||||
|
{ messages from debug server to the nub running in a target
|
||||||
|
thread's address space. }
|
||||||
|
type
|
||||||
|
debug_nub_message = (
|
||||||
|
B_READ_MEMORY, // read some memory
|
||||||
|
B_WRITE_MEMORY, // write some memory
|
||||||
|
B_RUN_THREAD, // run thread full speed
|
||||||
|
B_STEP_THREAD, // step thread while pc in range
|
||||||
|
B_STEP_OVER_THREAD, // step thread while pc in range, skip calls
|
||||||
|
B_STEP_OUT_THREAD, // step thread till exit current proc
|
||||||
|
B_SET_BREAKPOINT, // set a breakpoint
|
||||||
|
B_CLEAR_BREAKPOINT, // set a breakpoint
|
||||||
|
B_STOP_NEW_THREADS, // en/disable stopping of child threads
|
||||||
|
B_GET_THREAD_DEBUG_INFO, // get debugging info
|
||||||
|
B_ACKNOWLEGE_IMAGE_CREATED, // acknowlege image created
|
||||||
|
B_START_PROFILER, // start profiler
|
||||||
|
B_STOP_PROFILER, // stop profiler
|
||||||
|
B_SET_WATCHPOINT, // set a watchpoint
|
||||||
|
B_CLEAR_WATCHPOINT, // clear a watchpoint
|
||||||
|
B_STOP_ON_DEBUG, // stop all threads in team when one enters db
|
||||||
|
B_GET_THREAD_STACK_TOP, // get top of ustack of a thread in the kernel
|
||||||
|
B_HANDOFF_TO_OTHER_DEBUGGER, // prepare debug nub for handing off to another debugger
|
||||||
|
B_GET_WHY_STOPPED // ask why the thread is stopped
|
||||||
|
);
|
||||||
|
|
||||||
|
// structures passed to the nub
|
||||||
|
nub_read_memory_msg = packed record
|
||||||
|
reply_port : port_id; // port for reply from kernel
|
||||||
|
count : Longint; // # bytes
|
||||||
|
addr : PChar; // address to read
|
||||||
|
end;
|
||||||
|
|
||||||
|
nub_write_memory_msg = packed record
|
||||||
|
reply_port : port_id; // port for reply from kernel
|
||||||
|
count : Longint; // # bytes
|
||||||
|
addr : PChar; // address to write
|
||||||
|
end;
|
||||||
|
|
||||||
|
nub_run_thread_msg = packed record
|
||||||
|
thread : thread_id; // thread id
|
||||||
|
align_to_double : Longint; // for alignment
|
||||||
|
cpu : cpu_state; // cpu state
|
||||||
|
end;
|
||||||
|
|
||||||
|
nub_step_thread_msg = packed record
|
||||||
|
thread : thread_id; // thread id
|
||||||
|
align_to_double : Longint; // for alignment
|
||||||
|
cpu : cpu_state; // cpu state
|
||||||
|
low_pc : PChar; // low end of pc range
|
||||||
|
high_pc : PChar; // highend of pc range
|
||||||
|
end;
|
||||||
|
|
||||||
|
nub_step_over_thread_msg = packed record
|
||||||
|
thread : thread_id; // thread id
|
||||||
|
align_to_double : Longint; // for alignment
|
||||||
|
cpu : cpu_state; // cpu state
|
||||||
|
low_pc : PChar; // low end of pc range
|
||||||
|
high_pc : PChar; // highend of pc range
|
||||||
|
end;
|
||||||
|
|
||||||
|
nub_step_out_thread_msg = packed record
|
||||||
|
thread : thread_id; // thread id
|
||||||
|
align_to_double : Longint; // for alignment
|
||||||
|
cpu : cpu_state; // cpu state
|
||||||
|
end;
|
||||||
|
|
||||||
|
nub_set_breakpoint_msg = packed record
|
||||||
|
reply_port : port_id; // port for reply from kernel
|
||||||
|
addr : PChar; {char *addr} // breakpoint address
|
||||||
|
end;
|
||||||
|
|
||||||
|
nub_clear_breakpoint_msg = packed record
|
||||||
|
reply_port : port_id; // port for reply from kernel
|
||||||
|
addr : PChar; // breakpoint address
|
||||||
|
end;
|
||||||
|
|
||||||
|
nub_stop_new_threads_msg = packed record
|
||||||
|
reply_port : port_id; // port for reply from kernel
|
||||||
|
thread : thread_id;
|
||||||
|
enabled : Boolean; // en/disable stop of child threads
|
||||||
|
end;
|
||||||
|
|
||||||
|
nub_get_thread_debug_info_msg = packed record
|
||||||
|
reply_port : port_id; // port for reply from kernel
|
||||||
|
thread : thread_id;
|
||||||
|
end;
|
||||||
|
|
||||||
|
nub_get_thread_debug_info_reply = packed record
|
||||||
|
debug_flags : Longint; // returned thread debugging flags
|
||||||
|
end;
|
||||||
|
|
||||||
|
nub_acknowlege_image_created_msg = packed record
|
||||||
|
token : Longint;
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
perfmon_privilege = (
|
||||||
|
PERFMON_USER_MODE,
|
||||||
|
PERFMON_KERNEL_MODE,
|
||||||
|
PERFMON_KERNEL_AND_USER_MODE
|
||||||
|
);
|
||||||
|
|
||||||
|
perfmon_event_selector = packed record
|
||||||
|
event,
|
||||||
|
event_qualifier : Longword;
|
||||||
|
privilege : perfmon_privilege;
|
||||||
|
init_val : Longint; // usually should be 0; should be negative for interrupts
|
||||||
|
flags : Longword; // HW-specific bits, usually 0
|
||||||
|
end;
|
||||||
|
|
||||||
|
nub_start_profiler_msg = packed record
|
||||||
|
reply_port : port_id; // port for reply from kernel
|
||||||
|
thid : thread_id;
|
||||||
|
perfmon_counter : Longint;
|
||||||
|
perfmon_event : perfmon_event_selector;
|
||||||
|
num : Longint;
|
||||||
|
slots : array[0..1] of Longint;
|
||||||
|
end;
|
||||||
|
|
||||||
|
nub_stop_profiler_msg = packed record
|
||||||
|
reply_port : port_id; // port for reply from kernel
|
||||||
|
thid : thread_id;
|
||||||
|
perfmon_counter : Longint;
|
||||||
|
end;
|
||||||
|
|
||||||
|
nub_stop_profiler_reply = packed record
|
||||||
|
num : Longint;
|
||||||
|
slots : array[0..1] of Longint;
|
||||||
|
end;
|
||||||
|
|
||||||
|
nub_set_watchpoint_msg = packed record
|
||||||
|
reply_port : port_id; // port for reply from kernel
|
||||||
|
addr : PChar; // watchpoint address
|
||||||
|
_type : Integer; // watchpoint type
|
||||||
|
end;
|
||||||
|
|
||||||
|
nub_clear_watchpoint_msg = packed record
|
||||||
|
reply_port : port_id; // port for reply from kernel
|
||||||
|
addr : PChar; // watchpoint address
|
||||||
|
end;
|
||||||
|
|
||||||
|
nub_stop_on_debug_msg = packed record
|
||||||
|
reply_port : port_id; // port for reply from kernel
|
||||||
|
thread : thread_id; // thid of thread to set this for
|
||||||
|
enabled : Boolean;
|
||||||
|
end;
|
||||||
|
|
||||||
|
nub_get_thread_stack_top_msg = packed record
|
||||||
|
reply_port : port_id;
|
||||||
|
thread : thread_id;
|
||||||
|
end;
|
||||||
|
|
||||||
|
nub_get_thread_stack_top_reply = packed record
|
||||||
|
stack_top : Pointer; // stack ptr at entry to the kernel
|
||||||
|
pc : Pointer; // program ctr at entry to the kernel
|
||||||
|
end;
|
||||||
|
|
||||||
|
nub_handoff_msg = packed record
|
||||||
|
reply_port,
|
||||||
|
new_db_port : port_id;
|
||||||
|
end;
|
||||||
|
|
||||||
|
nub_get_why_stopped_msg = packed record
|
||||||
|
thread : thread_id;
|
||||||
|
end;
|
||||||
|
|
||||||
|
// union of all stuctures passed to the nub
|
||||||
|
to_nub_msg = packed record
|
||||||
|
nub_read_memory : nub_read_memory_msg;
|
||||||
|
nub_write_memory : nub_write_memory_msg;
|
||||||
|
nub_run_thread : nub_run_thread_msg;
|
||||||
|
nub_step_thread : nub_step_thread_msg;
|
||||||
|
nub_step_over_thread : nub_step_over_thread_msg;
|
||||||
|
nub_step_out_thread : nub_step_out_thread_msg;
|
||||||
|
nub_set_breakpoint : nub_set_breakpoint_msg;
|
||||||
|
nub_clear_breakpoint : nub_clear_breakpoint_msg;
|
||||||
|
nub_stop_new_threads : nub_stop_new_threads_msg;
|
||||||
|
nub_get_thread_debug_info : nub_get_thread_debug_info_msg;
|
||||||
|
nub_acknowlege_image_created : nub_acknowlege_image_created_msg;
|
||||||
|
nub_start_profiler : nub_start_profiler_msg;
|
||||||
|
nub_stop_profiler : nub_stop_profiler_msg;
|
||||||
|
nub_set_watchpoint : nub_set_watchpoint_msg;
|
||||||
|
nub_clear_watchpoint : nub_clear_watchpoint_msg;
|
||||||
|
nub_stop_on_debug : nub_stop_on_debug_msg;
|
||||||
|
nub_get_thread_stack_top : nub_get_thread_stack_top_msg;
|
||||||
|
nub_handoff : nub_handoff_msg;
|
||||||
|
nub_get_why_stopped : nub_get_why_stopped_msg;
|
||||||
|
end;
|
||||||
|
|
||||||
|
{ messages passed to the external debugger
|
||||||
|
|
||||||
|
*** DANGER WILL ROBINSON!! *** Don't change the ordering/numbering
|
||||||
|
of these messages. Doing so will break 3rd party debuggers (i.e.,
|
||||||
|
MWDebug) between releases. }
|
||||||
|
|
||||||
|
debugger_message = (
|
||||||
|
B_THREAD_STOPPED, // thread stopped, here is its state
|
||||||
|
B_TEAM_CREATED, // team was created
|
||||||
|
B_TEAM_DELETED, // team was deleted
|
||||||
|
{$ifdef POWERPC}
|
||||||
|
B_PEF_IMAGE_CREATED, // pef image was created
|
||||||
|
B_PEF_IMAGE_DELETED, // pef image was deleted
|
||||||
|
{$elif CPUI386}
|
||||||
|
B_ELF_IMAGE_CREATED, // pe image was created
|
||||||
|
B_ELF_IMAGE_DELETED, // pe image was deleted
|
||||||
|
{$endif}
|
||||||
|
B_THREAD_CREATED, // thread was created
|
||||||
|
B_THREAD_DELETED, // thread was deleted
|
||||||
|
B_SYSCALL_POST // end of syscall
|
||||||
|
);
|
||||||
|
|
||||||
|
// structures passed to the external debugger
|
||||||
|
type
|
||||||
|
|
||||||
|
db_thread_stopped_msg = packed record
|
||||||
|
thread : thread_id; // thread id
|
||||||
|
team : team_id; // team id
|
||||||
|
why : db_why_stopped; // reason for contacting debugger
|
||||||
|
nub_port : port_id; // port to nub for this team
|
||||||
|
cpu : cpu_state; // cpu state
|
||||||
|
data : Pointer; // additional data
|
||||||
|
end;
|
||||||
|
|
||||||
|
db_team_created_msg = packed record
|
||||||
|
team : team_id; // id of new team
|
||||||
|
end;
|
||||||
|
|
||||||
|
db_team_deleted_msg = packed record
|
||||||
|
team : team_id; // id of deleted team
|
||||||
|
end;
|
||||||
|
|
||||||
|
db_pef_image_created_msg = packed record
|
||||||
|
reply_token : Longint; // token to acknowledge receipt (REQUIRED!)
|
||||||
|
team : team_id; // team id
|
||||||
|
thread : thread_id; // id of thread that is loading the image
|
||||||
|
info : image_info; // info for the image
|
||||||
|
nub_port : port_id; // port to nub for this team
|
||||||
|
end;
|
||||||
|
|
||||||
|
db_pef_image_deleted_msg = packed record
|
||||||
|
team : team_id;
|
||||||
|
info : image_info; // info for the image
|
||||||
|
end;
|
||||||
|
|
||||||
|
db_thread_created_msg = packed record
|
||||||
|
thread : thread_id; // thread id
|
||||||
|
team : team_id; // team id
|
||||||
|
end;
|
||||||
|
|
||||||
|
db_thread_deleted_msg = packed record
|
||||||
|
thread : thread_id; // thread id
|
||||||
|
team : team_id; // team id
|
||||||
|
end;
|
||||||
|
|
||||||
|
db_get_profile_info_msg = packed record
|
||||||
|
thread : thread_id;
|
||||||
|
end;
|
||||||
|
|
||||||
|
db_syscall_post_msg = packed record
|
||||||
|
thread : thread_id; // thread id
|
||||||
|
team : team_id; // team id
|
||||||
|
start_time : bigtime_t; // time of syscall start
|
||||||
|
end_time : bigtime_t; // time of syscall completion
|
||||||
|
rethi, // upper word of return value
|
||||||
|
retlo, // lower word of return value
|
||||||
|
syscall : Longword; // the syscall number
|
||||||
|
args : array[0..7] of Longword; // syscall args
|
||||||
|
end;
|
||||||
|
|
||||||
|
// union of all structures passed to external debugger
|
||||||
|
|
||||||
|
to_debugger_msg = packed record
|
||||||
|
thread_stopped : db_thread_stopped_msg;
|
||||||
|
team_created : db_team_created_msg;
|
||||||
|
team_deleted : db_team_deleted_msg;
|
||||||
|
pef_image_created : db_pef_image_created_msg;
|
||||||
|
pef_image_deleted : db_pef_image_deleted_msg;
|
||||||
|
thread_created : db_thread_created_msg;
|
||||||
|
thread_deleted : db_thread_deleted_msg;
|
||||||
|
get_profile_info : db_get_profile_info_msg;
|
||||||
|
syscall_post : db_syscall_post_msg;
|
||||||
|
end;
|
||||||
|
|
||||||
|
{
|
||||||
|
debugger flags, state constants.
|
||||||
|
Bottom sixteen bits of a word are reserved for Kernel use.
|
||||||
|
Rest are used for user-level control by debuggers
|
||||||
|
using the debugging API. See nukernel/inc/thread.h.
|
||||||
|
}
|
||||||
|
const
|
||||||
|
DEBUG_USER_FLAGS_MASK = $ffff0000;
|
||||||
|
|
||||||
|
DEBUG_syscall_tracing_only = $00010000; // used by _kstrace_init_
|
||||||
|
DEBUG_syscall_fast_trace = $00020000;
|
||||||
|
DEBUG_syscall_trace_through_spawns = $00040000;
|
||||||
|
DEBUG_syscall_trace_whole_team = $00080000;
|
||||||
|
|
||||||
|
implementation
|
||||||
|
|
||||||
|
end.
|
||||||
38
bepascal/source/bepascal/pas/src/be/kernel/fs_index.pp
Normal file
38
bepascal/source/bepascal/pas/src/be/kernel/fs_index.pp
Normal file
@@ -0,0 +1,38 @@
|
|||||||
|
unit fs_index;
|
||||||
|
// Description: Interface to extended file system indexing.
|
||||||
|
|
||||||
|
interface
|
||||||
|
|
||||||
|
uses
|
||||||
|
BeBuild, SupportDefs, dirent;
|
||||||
|
|
||||||
|
type
|
||||||
|
index_info = packed record
|
||||||
|
type : Longword;
|
||||||
|
size : off_t;
|
||||||
|
modification_time,
|
||||||
|
creation_time : time_t;
|
||||||
|
uid : uid_t;
|
||||||
|
gid : gid_t;
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
function *fs_open_index_dir(device : dev_t) : DIR; cdecl; external 'root' name 'fs_open_index_dir';
|
||||||
|
function fs_close_index_dir(var d : DIR) : Integer; cdecl; external 'root' name 'fs_close_index_dir';
|
||||||
|
function *fs_read_index_dir(var d : DIR) : dirent; cdecl; external 'root' name 'fs_read_index_dir';
|
||||||
|
|
||||||
|
procedure fs_rewind_index_dir(var d : DIR); cdecl; external 'root' name 'fs_rewind_index_dir';
|
||||||
|
|
||||||
|
function fs_create_index(device : dev_t; const name : PChar; type : Integer;
|
||||||
|
flags : Cardinal) : Integer;
|
||||||
|
cdecl; external 'root' name 'fs_create_index';
|
||||||
|
|
||||||
|
function fs_remove_index(device : dev_t; const name : PChar) : Integer;
|
||||||
|
cdecl; external 'root' name 'fs_remove_index';
|
||||||
|
|
||||||
|
function fs_stat_index(device : dev_t; const name : PChar; var buf : index_info)
|
||||||
|
: Integer; cdecl; external 'root' name 'fs_stat_index';
|
||||||
|
|
||||||
|
implementation
|
||||||
|
|
||||||
|
end.
|
||||||
45
bepascal/source/bepascal/pas/src/be/kernel/fs_info.pp
Normal file
45
bepascal/source/bepascal/pas/src/be/kernel/fs_info.pp
Normal file
@@ -0,0 +1,45 @@
|
|||||||
|
unit fs_info;
|
||||||
|
// Description: File system information.
|
||||||
|
|
||||||
|
interface
|
||||||
|
|
||||||
|
uses
|
||||||
|
BeBuild, types, SupportDefs, OS;
|
||||||
|
|
||||||
|
const
|
||||||
|
B_FS_IS_READONLY = $00000001;
|
||||||
|
B_FS_IS_REMOVABLE = $00000002;
|
||||||
|
B_FS_IS_PERSISTENT = $00000004;
|
||||||
|
B_FS_IS_SHARED = $00000008;
|
||||||
|
B_FS_HAS_MIME = $00010000;
|
||||||
|
B_FS_HAS_ATTR = $00020000;
|
||||||
|
B_FS_HAS_QUERY = $00040000;
|
||||||
|
|
||||||
|
type
|
||||||
|
fs_info = packed record
|
||||||
|
dev : dev_t; // fs dev_t
|
||||||
|
root : ino_t; // root ino_t
|
||||||
|
flags : uint32; // file system flags
|
||||||
|
block_size, // fundamental block size
|
||||||
|
io_size, // optimal io size
|
||||||
|
total_blocks, // total number of blocks
|
||||||
|
free_blocks, // number of free blocks
|
||||||
|
total_nodes, // total number of nodes
|
||||||
|
free_nodes : off_t; // number of free nodes
|
||||||
|
device_name : string[128]; // device holding fs
|
||||||
|
volume_name : string[B_FILE_NAME_LENGTH]; // volume name
|
||||||
|
fsh_name : string[B_OS_NAME_LENGTH]; // name of fs handler
|
||||||
|
end;
|
||||||
|
|
||||||
|
function dev_for_path(const path : PChar) : dev_t;
|
||||||
|
cdecl; external 'root' name 'dev_for_path';
|
||||||
|
|
||||||
|
function next_dev(var pos : Longint) : dev_t;
|
||||||
|
cdecl; external 'root' name 'next_dev';
|
||||||
|
|
||||||
|
function fs_stat_dev(dev : dev_t; var info : fs_info) : Integer;
|
||||||
|
cdecl; external 'root' name 'fs_stat_dev';
|
||||||
|
|
||||||
|
implementation
|
||||||
|
|
||||||
|
end.
|
||||||
Reference in New Issue
Block a user