linux kernel-how current marco works in IA32

问题描述

how current marco works in IA32

When I brose the code in Linux kernel 2.6.24, I find this.

 static __always_inline struct task_struct *get_current(void)
{
        return x86_read_percpu(current_task);
}

When I am looking for x86_read_percpue, It looks like this.

 #define x86_read_percpu(var) percpu_from_op("mov", per_cpu__##var)

But it seems like this.

 #define percpu_from_op(op,var)
        ({
                typeof(var) ret__;
                switch (sizeof(var)) {
                case 1:
                        asm(op "b "__percpu_seg"%1,%0"
                            : "=r" (ret__)
                            : "m" (var));
                        break;
                case 2:
                        asm(op "w "__percpu_seg"%1,%0"
                            : "=r" (ret__)
                            : "m" (var));
                        break;
                case 4:
                        asm(op "l "__percpu_seg"%1,%0"
                            : "=r" (ret__)
                            : "m" (var));
                        break;
                default: __bad_percpu_size();
                }
                ret__; })

I can't find per_cpu_current_task in source code!!!!!!!

解决方案

This had me beating my head against the wall for days. Now as you know, It is fairly straightforward to open an SDL surface in a window:
SDL_Surface *screen = SDL_SetVideoMode(width, height, 24, SDL_......
答案就在这里:How to make an SDL window the child of another window in Win32

时间: 2024-10-24 16:49:05

linux kernel-how current marco works in IA32的相关文章

The Linux Kernel Module Programming Guide

The Linux Kernel Module Programming Guide Peter Jay SalzmanMichael BurianOri Pomerantz Copyright 2001 Peter Jay Salzman The Linux Kernel Module Programming Guide is a free book; you may reproduce and/or modify it under the terms of the Open Software

Linux内核DoS漏洞CVE-2016-3140再次出现 Linux kernel 3.10及以下多个版本受影响 目前没有补丁

该Linux内核漏洞涉及Redhat.Oracle.Debian等诸多linux版本,问题出在Linux内核 的 'digi_acceleport.c' 模块上,攻击者利用该漏洞,可能会引发本地拒绝服务攻击.目前看到受影响的最高linux版本是 Linux kernel 3.10 安全加曾经提供过一份Linux内核漏洞分析手册,大家可以再回顾一下 [下载]Linux内核漏洞分析实战 看看专家是怎么一步步用gdb Kgdb调试linux内核驱动的 Bugtraq ID: 84304 Class:

Linux kernel suspend resume学习:2.6.35与3.0.35比较【转】

转自:http://blog.csdn.net/njuitjf/article/details/18317149 Linux kernel suspend resume学习:2.6.35与3.0.35比较 最近在学习linux kernel中suspend和resume的处理.只是一味的看代码,有点枯燥,刚好有两个项目使用了不同的内核版本,就以比较这两个间的处理差别为线索进行学习.由于列举了很多代码,为了保持连续性,整篇文章还是放到了一个blog中. 首先看看公开出去的接口,都是文件/sys/p

Linux Kernel sys_call_table、Kernel Symbols Export Table Generation Principle、Difference Between System Calls Entrance In 32bit、64bit Linux【转】

转自:http://www.cnblogs.com/LittleHann/p/4127096.html 目录 1. sys_call_table:系统调用表 2. 内核符号导出表:Kernel-Symbol-Table 3. Linux 32bit.64bit环境下系统调用入口的异同 4. Linux 32bit.64bit环境下sys_call_table replace hook   1. sys_call_table:系统调用表 0x1: sys_call_table简介 sys_call

在Ubuntu上编译 emulat Android avd内核源代码(Linux Kernel)

因为我没有真机的环境  所以需要在模拟器中进行模拟进行,所以要下载支持模拟器的源代码版本,而goldfish这个源代码版本就是专门为模拟器环境而提供的. The goldfish project contains the kernel sources for the emulated platforms. 一.首先,到 git clone https://android.googlesource.com/kernel/goldfish.git下载Linux Kernel for Android

Kprobe在Linux kernel debug中的应用

一直在做kernel开发方面的工作,也一直苦于kernel debug的困惑,到底如何进行kernel开发的debug的工作?今天经美国同事的推荐,我认为kprobe是一个非常好的debug工具.其本质原理就是在你需要probe的地方放入断点指令,然后在断点处调用你的调试/测试程序,从而可以实现对kernel程序的调试/测试. Kprobe只是提供了一种机制,使得用户可以在系统运行时调试/测试内核程序.使用Kprobe需要做如下几件事情: 1,需要找到测试点所对应的内存地址.这件工作可能是最麻烦

Linux Kernel 4.5在3月15日发布最终版

  今天Linus Torvalds和辛苦工作的内核团队非常自豪的宣布了Linux Kernel 4.5版本,并已经开放下载.自2016年1月25日首个候选版本发布,经历了长达两个多月的不懈更新,在3月6日发布最后一个候选版本之后,Linux Kernel 4.5终于在今天获得了最终版本. Linux Kernel 4.5的突出特性包括部署了AMD的PowerPlay电池管理技术,针对Radeon 显卡添加的AMD GPU开源驱动带来了更高的性能输出,同时在处理Brtfs文件系统中改善了空闲空间

如何通过Git在本地建立Linux Kernel的版本库镜像

在本地Git的版本库根目录下执行以下命令,将会同步Linux Kernel版本库到本地,进行镜像. git clone --bare git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git 当然,该命令只会在本地建立版本库镜像.那么如何保持和Linux Kernel版本库的更新呢? 建议参考以下项目,使用git-mirror进行定时同步更新版本库. https://github.com/ndechesne/git-mirr

nginx conf by linux kernel

#nginx conf by linux kernel net.ipv4.tcp_max_tw_buckets = 6000 net.ipv4.ip_local_port_range = 1024 65000 net.ipv4.tcp_tw_recycle=1 net_ipv4.tcp_tw_reuse=1 net_ipv4.tcp_syncookies=1 net.core.somaxconn=262144 net.core.netdev_max_backlog=262144 net.ipv4