这个.c文件根本就不是用来编译运行的

#define DEFINE(sym, val) 
        asm volatile("\n->" #sym " %0 " #val : : "i" (val))
那个宏定义在asm-offsets.c中,这个.c文件根本就不是用来编译运行的,只是在编译内核的时候,用它生成一个asm-offsets.s文件,然后使用一个脚本将这个asm-offsets.s再转换为asm-offsets.h。这个头文件遵循汇编语法 ...  

[prev in list] [next in list] [prev in thread] [next in thread]   List:       linux-kernel  Subject:    [RFC] Standard way of generating assembler offsets  From:       Keith Owens <kaos () ocs ! com ! au>  Date:       2001-10-04 11:47:08  [Download message RAW]  Almost every architecture generates Assembler values to map the offsets  of fields in C structures, about the only exception is i386 and that is  because its offsets are hard coded into entry.S.  Every arch has done  it differently, none of them have got it exactly right.  As part of kbuild 2.5 I am standardizing on one method for generating  Assembler offsets.  This change is required for kbuild 2.5 but it can  be added to 2.4 without disturbing the current kbuild, I want to do  this gradually now instead of a single massive change in kernel 2.5.  I  will be issuing per architecture changes for generating Assembler  offsets against 2.4.  The kbuild 2.5 method for generating Assembler offsets satisfies these  requirements:  * No manual intervention required.  Many architectures rely on users    running make dep after changing config options that affect the    Assembler offsets.  If the user forgets to run make dep then the C    and Assembler code is out of sync - totally unacceptable.  This is    completely fixed in kbuild 2.5; I cannot do a complete fix in kbuild    2.4 but it is still better than the existing manual system.  * Standard name for the related files.  There are 6+ different names    for the files used to generate Assembler offsets, kbuild 2.5 uses    asm-offsets.[csh] on all architectures.  * Allows for multiple parallel compiles from the same source tree.    Writing the generated asm-offsets.h to include/asm is not an option,    it prevents concurrent compiles.  * The method must work in native and cross compile mode and give    exactly the same results.  Some 2.4 code only works in native mode,    some architectures have different methods for native and cross    compile with different output formats.  Yeuch!  * Standard scripts for generating the output.  Every arch does it    differently in 2.4, standards are good!  * Correct dependency trees.  Because 2.4 make dep does not scan .S    files, there is little or no dependency information.  Even if the    offsets are regenerated, the affected Assembler code does not always    get rebuilt.  kbuild 2.5 handles dependencies for Assembler as well    as C; I cannot get kbuild 2.4 perfect but I can improve on the    existing (or non-existent) 2.4 dependencies.  All architectures will define arch/$(ARCH)/asm-offsets.c.  This has a  standard prologue for the macros that convert offsets to Assembler,  followed by arch specific field references.  arch/$(ARCH)/asm-offsets.s is generated from arch/$(ARCH)/asm-offsets.c  using standard rules, although kbuild 2.4 needs some tweaking.  arch/$(ARCH)/asm-offsets.h is generated from arch/$(ARCH)/asm-offsets.s  by a semi-standard script.  Most of the script is common to all  architectures but the precise format of the Assembler output is arch  specific.  The final result is included in *only* the Assembler programs that need  it, as #include "asm-offsets.h" with -I arch/$(ARCH) in the relevant  Makefiles.  Hard coding relative paths in source files is a pet hate,  use #include "localname.h" and -I instead.  Including the generated  file in C code is not allowed, it severly pollutes the dependency  chain, to the extent that any config change can force a complete  recompile, unacceptable.  Example from i386:  arch/i386/asm-offsets.c  /*   * Generate definitions needed by assembly language modules.   * This code generates raw asm output which is post-processed to extract   * and format the required data.   */  #include <linux/types.h>  #include <linux/stddef.h>  #include <linux/sched.h>  /* Use marker if you need to separate the values later */  #define DEFINE(sym, val, marker) \    asm volatile("\n-> " #sym " %0 " #val " " #marker : : "i" (val))  #define BLANK() asm volatile("\n->" : : )  int  main(void)  {    DEFINE(state,        offsetof(struct task_struct, state),);    DEFINE(flags,        offsetof(struct task_struct, flags),);    DEFINE(sigpending,   offsetof(struct task_struct, sigpending),);    DEFINE(addr_limit,   offsetof(struct task_struct, addr_limit),);    DEFINE(exec_domain,  offsetof(struct task_struct, exec_domain),);    DEFINE(need_resched, offsetof(struct task_struct, need_resched),);    DEFINE(tsk_ptrace,   offsetof(struct task_struct, ptrace),);    DEFINE(processor,    offsetof(struct task_struct, processor),);    BLANK();    DEFINE(ENOSYS,       ENOSYS,);    return 0;  }  asm-offsets.s to asm-offsets.h.  # Convert raw asm offsets into something that can be included as  # assembler definitions.  It converts  #   -> symbol $value source  # into  #   symbol = value /* 0xvalue source */  echo ‘#ifndef __ASM_OFFSETS_H__‘  echo ‘#define __ASM_OFFSETS_H__‘  echo ‘/*‘  echo ‘ * DO NOT MODIFY‘  echo ‘ *‘  echo " * This file was generated by arch/$(ARCH)/Makefile.in."  echo ‘ *‘  echo ‘ */‘  echo ‘‘  awk ‘    /^->$/{printf("\n")}    /^-> /{      sym = $2;      val = $3;      sub(/^\$/, "", val);      $1 = "";      $2 = "";      $3 = "";      printf("%-20s = %3d\t/* 0x%x\t%s */\n", sym, val, val, $0)    }  ‘  echo ‘#endif‘  Generated arch/i386/asm-offsets.h  #ifndef __ASM_OFFSETS_H__  #define __ASM_OFFSETS_H__  /*   * DO NOT MODIFY   *   * This file was generated by arch/i386/Makefile.in.   *   */  state                =   0      /* 0x0     offsetof(struct task_struct, state) */  flags                =   4      /* 0x4     offsetof(struct task_struct, flags) */  sigpending           =   8      /* 0x8     offsetof(struct task_struct, sigpending) */  addr_limit           =  12      /* 0xc     offsetof(struct task_struct, addr_limit) */  exec_domain          =  16      /* 0x10    offsetof(struct task_struct, exec_domain) */  need_resched         =  20      /* 0x14    offsetof(struct task_struct, need_resched) */  tsk_ptrace           =  24      /* 0x18    offsetof(struct task_struct, ptrace) */  processor            =  52      /* 0x34    offsetof(struct task_struct, processor) */  ENOSYS               =  38      /* 0x26    ENOSYS */  #endif  -  To unsubscribe from this list: send the line "unsubscribe linux-kernel" in  the body of a message to [email][email protected][/email]  More majordomo info at  http://vger.kernel.org/majordomo-info.html  Please read the FAQ at  http://www.tux.org/lkml/  [prev in list] [next in list] [prev in thread] [next in thread]   Configure | About MARC | Support MARC | Got a list to add? | Sponsored by 10East and KoreLogic  

这个.c文件根本就不是用来编译运行的,布布扣,bubuko.com

时间: 2024-10-10 14:37:03

这个.c文件根本就不是用来编译运行的的相关文章

如何在命令提示符下编译运行含有Package的java文件

这篇是大二自学Java的时候记下的笔记,中午回顾印象笔记的时候意外看到了这篇.看到多年前写下的文字,我想起那时候我对Java的懵懵懂懂,每天晚上在图书馆照着书写书上的示例代码,为一个中文分号绞尽脑汁,为命令提示符上打印出的图案而兴奋.到现在我依然觉得,一个从没有过编程经验的人在屏幕上打印出Hello World 的时候,他真的感觉是对一个全新的世界说了句"你好,我来了". 尽管现在来看那时候遇到的问题现在看来真的是很简单,甚至可以说是很蠢的,但我依然感激当初那个再图书馆写代码的自己.正

必知必会的目录和文件的作用、安装软件方法、运行级别

作者:Georgekai 归档:学习笔记 2017/12/28 目  录 第1章 ctrl+1 1 1.2  /etc/目录 1 1.2.1                   网卡配置文件和DNS配置文件 1.2.2                更改本机hosts文件 1.2.3                修改主机名 1.2.4                开机自动挂载的设备与目录的对应关系 1.2.5                开机自动运行的软件和命令存放位置 1.2.6    

vscode配置编译运行调试C/C++文件-windows环境

在windows环境下,编译运行小文件的C/C++环境 软件准备: vscode mingw64(官网下特别慢,可以在devc++安装软件里中找,放到全局变量中) 插件下载: Run Code C/C++ 运行配置: 安装好编译器和运行插件后,C/C++程序就可以运行了. 调试配置: 调试配置需要添加两个文件,在当前文件夹下,生成一个.vscode文件夹,里面生成两个文件 launch.json { "version": "0.2.0", "configu

codeblocks中cocos2dx项目添加新的.cpp和.h文件后编译运行的方法

新建了cocos2dx项目后(比如我这里建立的项目名为Test01),项目目录下有如下目录和文件: bin CMakeLists.txt MyGame.layout proj.win10 Classes cocos2d proj.android proj.win32 CMakeCache.txt lib proj.android-studio proj.win8.1-universal CMakeFiles Makefile proj.ios_mac Resources cmake_instal

matlab编译运行c文件

1.控制台输入mex -setup,先把编译器连接好. 2.控制台输入mex a.c,编译源文件生成a.mexw32文件. 3.控制台输入如下参数: 运行正确! a.c源程序如下: #include "mex.h"//?使用MEX文件必须包含的头文件?//?执行具体工作的C函数? double add(double x,double y){ return x+y; } //?MEX文件接口函数? void mexFunction(int nlhs,mxArray *plhs[],int

java 文件编译运行

对于一个新手来说,使用命令行进行代码的检测与运行是很必要的,今天来说: 1,使用win键盘键+R键进入运行界面,(或者开始找到运行),输入cmd进入命令行界面. 2,使用 cd +文件所在文件夹,进入程序所在文件夹. 3,使用javac编译程序,javac+文件名<需要带后缀,如.java>,编译要是正确不会出现显示,要是有错误按照错误回去修改程序. 4,使用java +文件名<不需要带后缀,如.java>运行,查看运行结果. 常见错误有:环境变量配置不正确,javac编译出错,检

windows下修改文件时的换行符引起在linux运行不正常的解决

env: /etc/init.d/nginx: No such file or directory 原因:在windows下修改文件的时候换行符出的问题. windows和linux下的换行符是不同的.一般操作系统上的运行库会自动决定文本文件的换行格式. 如一个程序在windows上运行就生成CR/LF换行格式的文本文件,而在linux上运行就生成LF格式换行的文本文件. 在一个平台上使用另一种换行符的文件文件可能会带来意想不到的问题, 特别是在编辑程序代码时. 有时候代码在编辑器中显示正常,

Flash安全沙箱---解决flash(swf文件)只能在FlashBuilderr的bin-debug目录下运行的问题

今天遇到一个有关Flash的问题. 我用FlashBuilder做的SWF文件,在原bin-debug目录下运行正常,而把其中的文件或者把整个bin-debug目录复制到其它地方就不能运行了.在网上搜了一下,大致知道是因为flash player的安全沙箱问题引起的.网上也给出了解决方法.但是发现他们给出的路径我没有,我现在用的是win7,可能他们说的是xp吧. 解决方案无非是把本地信任的路径加入到一个叫flashbuilder.cfg的文件中,于是我便在C盘下搜索这个文件,后来终于在我的C:\

初学cmd编译运行Java文件,部分路径要区分大小写

①准备工作 首先用记事本编写HelloWorld.java放至G:\Javaspace路径 public class HelloWorld{ public static void main(String []args){ System.out.println("Hello World"); } } 因为我要编译的java文件放在G盘,在cmd窗口输入 G: 转至G盘目录(网上虽说cmd不区分大小写,但是这个盘符是要大写的!) 然后输入 cd javaspace cd是cmd的换目录命令